#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MCU OTA升级工具打包脚本
"""

import PyInstaller.__main__
import os
import sys
import shutil

def build_exe():
    """打包可执行文件"""
    
    # 确保在项目根目录
    project_root = os.path.dirname(os.path.abspath(__file__))
    os.chdir(project_root)
    
    print("开始打包 MCU OTA升级工具...")
    
    # 清理旧的out目录内容
    out_dir = os.path.join(project_root, "out")
    if os.path.exists(out_dir):
        print("清理旧的打包文件...")
        for item in os.listdir(out_dir):
            item_path = os.path.join(out_dir, item)
            if os.path.isfile(item_path) and item.endswith('.exe'):
                os.remove(item_path)
            elif os.path.isdir(item_path) and item in ['build', 'dist']:
                shutil.rmtree(item_path)
    else:
        os.makedirs(out_dir)
    
    # PyInstaller 参数
    args = [
        'main.py',                           # 主程序文件
        '--name=MCU_OTA工具',                 # 可执行文件名称
        '--onefile',                         # 打包成单个文件
        '--windowed',                        # 不显示控制台窗口
        '--distpath=out',                    # 输出到out目录
        '--workpath=out/build',              # 工作目录
        '--specpath=out',                    # spec文件位置
        '--add-data=configs;configs',        # 包含configs目录
        '--hidden-import=serial',            # 隐式导入serial
        '--hidden-import=serial.tools.list_ports',  # 隐式导入串口工具
        '--hidden-import=crcmod.predefined', # 隐式导入CRC模块
        '--hidden-import=qtawesome',         # 隐式导入图标库
        '--clean',                           # 清理缓存
        '--noconfirm',                       # 不询问确认
    ]
    
    print("执行打包命令...")
    try:
        PyInstaller.__main__.run(args)
        
        # 检查是否打包成功
        exe_path = os.path.join(out_dir, "MCU_OTA工具.exe")
        if os.path.exists(exe_path):
            file_size = os.path.getsize(exe_path) / (1024 * 1024)  # MB
            print(f"\n✅ 打包成功！")
            print(f"📁 输出文件: {exe_path}")
            print(f"📦 文件大小: {file_size:.1f} MB")
            
            # 创建快捷方式信息
            print(f"\n💡 使用说明:")
            print(f"   - 可执行文件位置: out/MCU_OTA工具.exe")
            print(f"   - 双击即可运行，无需安装Python环境")
            print(f"   - 程序包含了所有必要的配置文件")
            
        else:
            print("❌ 打包失败，未找到可执行文件")
            sys.exit(1)
            
    except Exception as e:
        print(f"❌ 打包过程出错: {e}")
        sys.exit(1)

if __name__ == "__main__":
    build_exe() 